/**
 * 状态管理类型定义 - 优化版
 * 支持动态状态管理和类型安全
 */

import { ModuleType } from './core'

// 重新导出ModuleType
export { ModuleType } from './core'

// ============= 状态实体定义 =============

/**
 * 状态基础接口 - 与后端StateBase模型对齐
 */
export interface StateBase {
  name: string
  code: string
  description?: string
  color: string
  icon?: string
  module_type: ModuleType
  is_enabled: boolean
  is_visible: boolean
  is_default: boolean
  sort_order: number
}

/**
 * 状态信息接口 - 用于状态管理器
 */
export interface StateInfo {
  id: string
  name: string
  code: string
  module_type: string
  description?: string
  color: string
  icon?: string
  sort_order: number
  is_enabled: boolean
  is_visible: boolean
  is_default: boolean
  created_at?: string
  updated_at?: string
}

/**
 * 状态选项接口 - 用于下拉选择
 */
export interface StateOption {
  value: string
  label: string
  color: string
  icon?: string
  disabled?: boolean
}

/**
 * 状态创建接口
 */
export interface StateCreate extends StateBase {
  // 创建时所有字段都是必需的
}

/**
 * 状态更新接口
 */
export interface StateUpdate extends Partial<Omit<StateBase, 'code' | 'module_type'>> {
  // 不允许更新code和module_type
}

/**
 * 状态响应接口 - 与后端StateResponse对齐
 */
export interface StateResponse extends StateBase {
  id: string
  created_at?: string
  updated_at?: string
  created_by?: string
  updated_by?: string
}

// ============= 模块状态响应 =============

/**
 * 模块状态响应接口
 */
export interface ModuleStateResponse {
  module_type: ModuleType
  states: StateResponse[]
  total_count?: number
  enabled_count?: number
  visible_count?: number
  default_state?: StateResponse
}

// ============= API查询参数 =============

/**
 * 状态查询参数
 */
export interface StateQueryParams {
  module_type?: ModuleType
  is_enabled?: boolean
  is_visible?: boolean
  search?: string
  skip?: number
  limit?: number
}

// ============= 表单验证 =============

/**
 * 状态表单数据
 */
export interface StateFormData extends Omit<StateCreate, 'code'> {
  code?: string // 编辑时可选
}

/**
 * 状态验证规则
 */
export interface StateValidationRules {
  name: {
    required: boolean
    minLength: number
    maxLength: number
  }
  code: {
    required: boolean
    pattern: RegExp
    minLength: number
    maxLength: number
  }
  description: {
    maxLength: number
  }
  color: {
    required: boolean
    pattern: RegExp
  }
  sort_order: {
    min: number
    max: number
  }
}

// ============= 默认值配置 =============

/**
 * 状态颜色选项
 */
export const STATE_COLORS = [
  '#3B82F6', // 蓝色
  '#10B981', // 绿色
  '#F59E0B', // 黄色
  '#EF4444', // 红色
  '#8B5CF6', // 紫色
  '#F97316', // 橙色
  '#06B6D4', // 青色
  '#84CC16', // 青绿色
  '#EC4899', // 粉色
  '#6B7280'  // 灰色
] as const

/**
 * 状态图标选项
 */
export const STATE_ICONS = [
  'circle',
  'check',
  'x',
  'play',
  'pause',
  'stop',
  'lightbulb',
  'code',
  'bug',
  'rocket',
  'clock',
  'flag',
  'star',
  'heart',
  'eye',
  'settings'
] as const

/**
 * 状态默认值
 */
export const STATE_DEFAULTS = {
  color: '#6B7280',
  icon: 'circle',
  is_enabled: true,
  is_visible: true,
  is_default: false,
  sort_order: 0,
  description: ''
} as const

/**
 * 状态验证规则
 */
export const STATE_VALIDATION_RULES: StateValidationRules = {
  name: {
    required: true,
    minLength: 1,
    maxLength: 50
  },
  code: {
    required: true,
    pattern: /^[a-z][a-z0-9_]*$/,
    minLength: 2,
    maxLength: 30
  },
  description: {
    maxLength: 200
  },
  color: {
    required: true,
    pattern: /^#[0-9A-Fa-f]{6}$/
  },
  sort_order: {
    min: 0,
    max: 999
  }
}

// ============= 模块默认状态配置 =============

/**
 * 各模块的默认状态配置
 */
export const MODULE_DEFAULT_STATES: Record<ModuleType, StateCreate[]> = {
  [ModuleType.PROJECT]: [
    {
      name: '规划中',
      code: 'planning',
      description: '项目处于规划阶段',
      color: '#409EFF',
      icon: 'calendar',
      module_type: ModuleType.PROJECT,
      is_enabled: true,
      is_visible: true,
      is_default: true,
      sort_order: 1
    },
    {
      name: '进行中',
      code: 'in_progress',
      description: '项目正在执行',
      color: '#67C23A',
      icon: 'play',
      module_type: ModuleType.PROJECT,
      is_enabled: true,
      is_visible: true,
      is_default: false,
      sort_order: 2
    },
    {
      name: '已完成',
      code: 'completed',
      description: '项目已完成',
      color: '#909399',
      icon: 'check',
      module_type: ModuleType.PROJECT,
      is_enabled: true,
      is_visible: true,
      is_default: false,
      sort_order: 3
    }
  ],
  [ModuleType.REQUIREMENT]: [
    {
      name: '草稿',
      code: 'draft',
      description: '需求草稿，尚未进入正式流程',
      color: '#94A3B8',
      icon: 'document',
      module_type: ModuleType.REQUIREMENT,
      is_enabled: true,
      is_visible: true,
      is_default: true,
      sort_order: 0
    },
    {
      name: '新建',
      code: 'new',
      description: '需求已创建，待处理',
      color: '#6B7280',
      icon: 'edit',
      module_type: ModuleType.REQUIREMENT,
      is_enabled: true,
      is_visible: true,
      is_default: false,
      sort_order: 1
    },
    {
      name: '评审中',
      code: 'reviewing',
      description: '需求评审中',
      color: '#F59E0B',
      icon: 'eye',
      module_type: ModuleType.REQUIREMENT,
      is_enabled: true,
      is_visible: true,
      is_default: false,
      sort_order: 2
    },
    {
      name: '已确认',
      code: 'confirmed',
      description: '需求已确认',
      color: '#10B981',
      icon: 'check',
      module_type: ModuleType.REQUIREMENT,
      is_enabled: true,
      is_visible: true,
      is_default: false,
      sort_order: 3
    },
    {
      name: '已拒绝',
      code: 'rejected',
      description: '需求已拒绝',
      color: '#EF4444',
      icon: 'x',
      module_type: ModuleType.REQUIREMENT,
      is_enabled: true,
      is_visible: true,
      is_default: false,
      sort_order: 4
    }
  ],
  [ModuleType.TASK]: [
    {
      name: '待处理',
      code: 'todo',
      description: '任务待处理',
      color: '#6B7280',
      icon: 'circle',
      module_type: ModuleType.TASK,
      is_enabled: true,
      is_visible: true,
      is_default: true,
      sort_order: 1
    },
    {
      name: '进行中',
      code: 'in_progress',
      description: '任务正在进行',
      color: '#F59E0B',
      icon: 'play',
      module_type: ModuleType.TASK,
      is_enabled: true,
      is_visible: true,
      is_default: false,
      sort_order: 2
    },
    {
      name: '审查中',
      code: 'in_review',
      description: '任务正在进行审查',
      color: '#722ED1',
      icon: 'eye',
      module_type: ModuleType.TASK,
      is_enabled: true,
      is_visible: true,
      is_default: false,
      sort_order: 3
    },
    {
      name: '已完成',
      code: 'done',
      description: '任务已完成',
      color: '#10B981',
      icon: 'check',
      module_type: ModuleType.TASK,
      is_enabled: true,
      is_visible: true,
      is_default: false,
      sort_order: 4
    }
  ],
  [ModuleType.DEFECT]: [],
  [ModuleType.VERSION]: [],
  [ModuleType.DOCUMENT]: [],  // 文档状态从状态管理系统动态获取，不再使用硬编码
  [ModuleType.USER]: [],
  [ModuleType.COMMENT]: [],
  [ModuleType.NOTIFICATION]: [],
  [ModuleType.PROJECT_PRIORITY]: [],
  [ModuleType.REQUIREMENT_PRIORITY]: [],
  [ModuleType.TASK_PRIORITY]: [],
  [ModuleType.DEFECT_PRIORITY]: [],
  [ModuleType.TEST_CASE]: [],
  [ModuleType.TEST_PLAN]: [],  // 测试计划状态从状态管理系统动态获取
  [ModuleType.APPROVAL]: [
    {
      name: '待审批',
      code: 'pending',
      description: '审批申请已提交，等待审批',
      color: '#F59E0B',
      icon: 'clock',
      module_type: ModuleType.APPROVAL,
      is_enabled: true,
      is_visible: true,
      is_default: true,
      sort_order: 1
    },
    {
      name: '审批中',
      code: 'in_progress',
      description: '审批正在进行中',
      color: '#3B82F6',
      icon: 'play',
      module_type: ModuleType.APPROVAL,
      is_enabled: true,
      is_visible: true,
      is_default: false,
      sort_order: 2
    },
    {
      name: '已通过',
      code: 'approved',
      description: '审批已通过',
      color: '#10B981',
      icon: 'check',
      module_type: ModuleType.APPROVAL,
      is_enabled: true,
      is_visible: true,
      is_default: false,
      sort_order: 3
    },
    {
      name: '已拒绝',
      code: 'rejected',
      description: '审批已拒绝',
      color: '#EF4444',
      icon: 'x',
      module_type: ModuleType.APPROVAL,
      is_enabled: true,
      is_visible: true,
      is_default: false,
      sort_order: 4
    },
    {
      name: '已取消',
      code: 'cancelled',
      description: '审批申请已取消',
      color: '#6B7280',
      icon: 'stop',
      module_type: ModuleType.APPROVAL,
      is_enabled: true,
      is_visible: true,
      is_default: false,
      sort_order: 5
    }
  ]
}